﻿//引用命名空间
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

//命名空间
namespace l2
{
 //类
    internal class Program
    {
        //主函数
        static void Main(string[] args)
        {
            Console.WriteLine("变量");

            #region 知识点一   折叠代码
            //主要作用   逻辑更清晰
            //是由#region  #endregion配对出现
            //具体作用    是可以将中间代码折叠  避免杂乱
            //本质是  编辑器提供给我们的  预处理指令
            //只会在编辑时有用  发布代码 或执行代码  它会被自动删除
            #endregion

            #region 知识点二  申明变量
            //变量  可以变化的容器    变量  就是用来存储各种不同类型的数值的  一个容器
            //不同的  变量类型  可以存储不同类型的值

            //变量申明固定写法
            //  变量类型  变量名 = 初始值;

            //int i = 1;
            //  变量类型 有14种变化
            //  变量名   我们自定义  要按一定规则
            //  初始值   一定要和变量类型统一
            //  = 和 ;  是固定不变的

            //变量类型

            //  死记硬背  变量类型的关键字
            //  记忆     各种不同变量类型所能存储的范围
            //  记忆     各种不同变量所能存储的类型


            //1.有符号的整型变量  是能存储 一定范围 正负数包括0的变量类型
            // sbyte  -128~127
            sbyte sb = 1;
            //打印字符串  通过+来进行拼接打印
            Console.WriteLine("sbyte变量sb中存储的值是："+sb);
            // int    -21亿~21亿多
            int i = 2;
            // short  -32768~32767之间
            short s = 3;
            // long   -9百万兆~9百万兆之间的数
            long l = 4;

            //2.无符号的整型变量  是能存储 一定范围  0和正数
            // byte   0~255
            byte b = 5;
            // uint   0~42亿多的一个范围
            uint u = 6;
            // ushort 0~65535之间的一个数
            ushort v = 7;
            // ulong  0~18百万兆之间的数 
            ulong q = 8;

            //3.浮点数(小数）
            //float  存储7/8位有效数字  根据编译器不同 有效数字也可能不一样
            //有效数字 从左到右从非零数开始算 存在四舍五入
            //加f  因为C#中 申明的小数点 默认是double的类型 加f 是告诉系统 它是float类型
            float f = 0.1234567890f;
            Console.WriteLine(f);

            //double  存储15~17位有效数字  抛弃的数字  会四舍五入
            double d = 0.12345678901234567890123456789;
            Console.WriteLine(d);

            //decimal  存储27~28位的有效数字 不建议使用
            decimal de = 0.123456789012345678901234567890m;
            Console.WriteLine(de);

            //4.特殊类型
            //bool  true  false  表示真假的数据类型           真假类型
            bool bo = true;
            bool bo2 = false;
            Console.WriteLine(bo+""+bo2);

            //char  用来存储单个字符的变量类型 （单个汉字也可） 字符类型
            char c = 'a';
            Console.WriteLine(c);

            //string  字符串类型  用来存储多个字符  无上限
            string str = "回答二十峰会idkh";
            Console.WriteLine(str);


            int x = 1000;
            Console.WriteLine(x);
            //变量的使用和修改不能无中生有必须 先有再修改，先声明才能用
            x = 900;
            Console.WriteLine(x);

            #endregion

            #region 知识点三 为什么有那么多不同的变量
            //不同变量类型  存储的范围和类型不一样  本质是占用的内存空间不同
            //选择不同的数据（变量）类型装备不同的数据

            //姓名
            //char  string
            string myname = "花花";

            //年龄
            byte age = 18;
            //身高
            float height = 176.5f;
            //体重
            float weight = 66.6f;
            //性别  ture女  false男
            bool sex = false;

            //数字用int  小数用float   字符串用string  真假用bool
            #endregion
 
            #region 知识点四  多个相同类型变量  同时申明
            int i2 = 1;
            float f2 = 3.2f;
            string str2 = "123";
            bool bo3 = true;

            int a1 = 1, a2 = 2, a3 = 3;
            Console.WriteLine(a1);
            string s1 = "123", s2 = "234", s3 = "345";
            Console.WriteLine(s1+s2+s3);









            #endregion
            
            #region 知识点五  变量初始化相关
           //变量申明时  可以不设置初始值 但不建议这样写  这样不安全

            int b2;
            b2 = 2;
            Console.WriteLine(b2);

            #endregion

            #region 知识点六  变量的存储空间（内存中）
            //1byte = 8bit
            //1KB = 1024byte
            //1MB = 1024KB
            //1GB = 1024MB
            //1TB = 1024GB
            //通过sizeof方法  可以获取变量类型所占的内存空间（单位：：字节）
            //有符号
            int sbyteSize = sizeof(sbyte);
            Console.WriteLine("sbyte所占的字节数为"+sbyteSize);
            int intSize = sizeof(int);
            Console.WriteLine("int所占的字节数为" + sbyteSize);
            int shortSize = sizeof(short);
            Console.WriteLine("short所占的字节数为" + sbyteSize);
            int longSize = sizeof(long);
            Console.WriteLine("long所占的字节数为" + sbyteSize);

            #endregion














        }
    }
}
